package shan.rpc.yurpc.proxy;

import lombok.extern.slf4j.Slf4j;
import shan.rpc.example.common.model.User;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * Mock 服务代理（JDK动态代理）
 */
@Slf4j
public class MockServiceProxy implements InvocationHandler {
    /**
     * 调用代理
     */
    @Override
    public Object invoke(Object proxy, Method method,Object[] args) throws Throwable{
        //根据方法的返回值类型，生成特定的默认值对象
        Class<?> methodReturnType=method.getReturnType();
        log.info("mock invoke {}", method.getName());
        return getDefaultObect(methodReturnType);
    }

    /**
     * 生成指定类型的默认值对象（可自行完善默认值逻辑）
     */
    private Object getDefaultObect(Class<?> type)
    {
        //基本类型
        if(type.isPrimitive()){
            if(type==boolean.class){
                return false;
            }else if(type==short.class){
                return (short) 0;
            }else if(type==int.class){
                return 0;
            }else if(type==long.class){
                return 0L;
            }else if(String.class.isAssignableFrom(type)){
                return "sb";
            }else if(type==char.class){
                return 's';
            }else if(type==float.class){
                return 0.5f;
            }else if(type==double.class){
                return 1.5d;
            }else if(type== User.class){
                return null;
            }
        }
        //对象类型
        return null;

    }
}
